/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ru.niir.goodfil.ui;

import org.apache.log4j.Logger;
import ru.niir.goodfil.db.Client;
import ru.niir.goodfil.db.User;
import ru.niir.goodfil.exceptions.MailerException;
import ru.niir.goodfil.fun.ISSignature;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

/**
 * Только подтвеждение регистрации.
 *
 * @author Носов А.В.
 */
public class RegistrationBean extends PageBean {

    private static final Logger logger = Logger.getLogger(RegistrationBean.class);

    /**
     * Запись активирована
     */
    private static final int CLIENT_ACTIVATED = 0;
    /**
     * Ошибка: запись была активирована ранее, повторная активация не требуется
     */
    private static final int CLIENT_ALREADY_ACTIVATED = 1;
    /**
     * Ошибка: аккаунт не найден
     */
    private static final int CLIENT_NOT_FOUND = 2;
    /**
     * Значение по-умолчанию, до процедуры активации
     */
    private static final int DEFAULT = -1;
    /**
     * Хранит результат активации клиента.
     * <p/>
     * 0 - запись клиента активирована
     * 1 - запись была активирована ранее
     * 2 - клиент не найден
     */
    private int active = DEFAULT;

    public RegistrationBean() {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String activationCode = request.getParameter("activation");

        logger.info("Activation: " + activationCode);

        Client client = gf().getClientByRegistrationCode(request.getParameter("activation"));

        if (client == null) {
            active = CLIENT_NOT_FOUND;
            return;
        }

        if (client.isActive()) {
            active = CLIENT_ALREADY_ACTIVATED;
            return;
        }

        gf().activateClient(client.getId());

        User manager = gf().getUserById(client.getManagerId());
        sendEmailToManagerAboutNewClient(manager, client);

        active = CLIENT_ACTIVATED;
    }

    private void sendEmailToManagerAboutNewClient(User manager, Client client) {
        String subject = "Новый клиент в ИНТЕРНЕТ-системе";
        String text = "Уважаемый, " + manager.getFio() + "!\n\n" +
                "В ИНТЕРНЕТ-системе зарегистрировался новый клиент: " + client.getCompanyName() + "\n" +
                "Проверьте его учетные данные, создайте для него клиента и отправьте клиенту его логин/пароль.\n" +
                ISSignature.get();

        try {
            gf().sendEmailMsg(manager.getEmail(), subject, text);
        } catch (MailerException ex) {
            logger.error(ex);
            ex.printStackTrace();
            facesError(ex.getError().getDescription());
        }
    }

    /**
     * Возвращает результат активации.
     *
     * @return результат активации
     */
    public int getActive() {
        return active;
    }
}
